home *** CD-ROM | disk | FTP | other *** search
- /* ==========================
- * AEAAccessorWildFromNull.cc
- * ==========================
- */
-
- #include "AEADebugging.h"
-
- #include <AERegistry.h>
-
- #include "AEAAccessorWildFromNull.hh"
- #include "AEAModelRoot.hh"
- #include "AEADesc.hh"
- #include "AEATokenModel.hh"
-
-
- template <class Type>
- class StackPointer {
- public:
- StackPointer(Type *inPtr) : mPtr(inPtr) {}
- virtual ~StackPointer() {delete mPtr;}
- protected:
- Type *mPtr;
- };
-
- AEAAccessorWildFromNull::AEAAccessorWildFromNull(AEAModelRoot &inRoot)
- : AEAAccessor(typeWildCard, typeNull), mRoot(inRoot)
- {
- }
-
- AEAAccessorWildFromNull::~AEAAccessorWildFromNull()
- {
- }
-
- void
- AEAAccessorWildFromNull::AccessObject(DescType inDesiredClass,
- const AEDesc *inContainerToken, DescType inContainerClass,
- DescType inKeyForm, const AEDesc *inKeyData, AEDesc *outToken) const
- {
- // Verify that inContainerToken is actually a null descriptor
- if (inContainerToken->descriptorType != typeNull
- || inContainerToken->dataHandle != NULL
- || inContainerClass != typeNull)
- ThrowOSErr_(errAEWrongDataType);
-
- OSErr err;
-
- AEADesc token;
- AEATokenModel *appToken;
-
- // Create a token to indicate the application,
- // and have it be destroyed when the current scope ends
- mRoot.MakeToken(appToken);
- StackPointer<AEATokenModel> tokenPtr(appToken);
-
- token.Create(typeModelToken, &appToken, sizeof appToken);
-
- err = ::AECallObjectAccessor(inDesiredClass, &token.Ref(), cApplication,
- inKeyForm, inKeyData, outToken);
- ThrowIfOSErr_(err);
- }
-